package TUILayer;

import java.util.*;
import ControlLayer.*;
import ModelLayer.LagerMappe.*;
import ModelLayer.OrdreMappe.*;
import ModelLayer.PersonMappe.*;

public class OrdreUI
{
    private LagerUI lagerUI;
    private PersonUI personUI;
    private OrdreCtr ordreCtr;
    
    
    private boolean running;
    private Scanner keyboard;
    
    public OrdreUI()
    {
        lagerUI = new LagerUI();
        personUI = new PersonUI();
        ordreCtr = new OrdreCtr();
        
        keyboard = new Scanner(System.in);
        running = true;
        mainMenu();
    }
    
    public void restart()
    {
        running = true;
        mainMenu();
    }
    
    /**
     * Main menu loop
     */
    private void mainMenu()
    {
        while(running)
        {
            writeWelcome();
            int choise = userInt();
            
            switch(choise)
            {
                case 1:
                    lavTest();
                    break;
                case 2:
                    opretOrdre();
                    break;
                case 3:
                    tilfoejVare();
                    break;
                case 4:
                    tilfoejPerson();
                    break;
                case 5:
                    visOrdre();
                    break;
                case 6:
                    afslutOrdre();
                    break;
                case 7:
                    running = false;
                    break;
                default:
                    forkertInput();
            }
            
            pause();
            
        }
        
    }
    
    private void writeWelcome()
    {
        System.out.println("\fMain menu:");
        System.out.println("##########");
        System.out.println("# 1) lav test-objekter (CRUD)");
        System.out.println("# 2) Opret ordre");
        System.out.println("# 3) Tilføj vare til ordre");
        System.out.println("# 4) Tilføj person til ordre");
        System.out.println("# 5) Vis ordre");
        System.out.println("# 6) Afslut ordre");
        System.out.println("# 7) Exit");
        System.out.println();
    }
    
    private int userInt()
    {
        System.out.print("Vælg et nummmer: ");
        int result = 0;
        result = keyboard.nextInt();
        return result;
    }
    
    /**
     * Bliver ved med at spørge (op til 5 gange) 
     * efter en ny choise (int),
     * indtil choise <= limit
     */
    private int intLoop(int limit)
    {
        int choise = 0;
        int counter = 5;
        boolean loop = true;
        while(loop && counter > 0)
        {
            choise = userInt();
            if(choise <= limit)
            {
                loop = false;
            }
            else
            {
                forkertInput();
                System.out.printf("%d forsøg tilbage \n", counter);
                counter--;
            }
        }
        
        return choise;
    }
    
    private String userString(String navnPaaString)
    {
        System.out.print("Indtast " + navnPaaString + ": ");
        String result = "";
        result = keyboard.nextLine();
        return result;
    }
    
    private void forkertInput()
    {
        System.out.println("Input ikke gyldigt!");
        pause();
    }
    
    private void pause()
    {
        Scanner pause = new Scanner(System.in);
        pause.nextLine();
    }
    
    //Menu metoder
    private void lavTest()
    {
        lagerUI.lagerMenu();
        personUI.personMenu();
    }
    
    private void opretOrdre()
    {
        ordreCtr.createOrdre();
        System.out.println("En ordre blev oprettet!");
    }
    
    private void tilfoejVare()
    {
        int antal = lagerUI.getAntal();
        Lagervare vare = lagerUI.getVare();
        String vareNavn = vare.getDelLager().getVare().getNavn();
        
        ordreCtr.addVare(antal, vare);
        System.out.printf("%d x %s blev tilføjet ordren \n", antal, vareNavn);
    }
    
    private void tilfoejPerson()
    {
        Person p = personUI.getPerson();
        if(p != null)
        {
            ordreCtr.addPerson(personUI.getPerson());
            System.out.println("Person blev tilføjet ordren");
        }
    }
    
    private void visOrdre()
    {
        Ordre o = ordreCtr.getOrdre();
        if(o != null)
        {
            if(o.getAnsat() != null)
            {
                System.out.println("Ansat Info:");
                System.out.printf(" Navn: %s \n ID: %s \n \n", o.getAnsat().getNavn(), o.getAnsat().getID());
            }
            
            if(o.getAlleDelordre().size() != 0)
            {
                System.out.println("Vare info: ");
                for(Delordre DO : o.getAlleDelordre())
                {
                    int antal = DO.getAntal();
                    String stregkode = DO.getDelLager().getVare().getStregkode();
                    String lager = DO.getLager().getNavn();
                    String hylde = DO.getDelLager().getHyldenr();
                    String navn = DO.getDelLager().getVare().getNavn();
                    
                    System.out.println(" Antal: " + antal);
                    System.out.println(" Stregkode: " + stregkode);
                    System.out.println(" Lager: " + lager);
                    System.out.println(" Hylde: " + hylde);
                    System.out.println(" Navn: " + navn);
                    System.out.println();
                }
            }
            
            if(o.getKunde() != null)
            {
                System.out.println("Kunde Info:");
                System.out.printf(" Navn %s \n ID %s \n \n", o.getKunde().getNavn(), o.getKunde().getID());
                
            }
        }
        else
        {
            System.out.println("Der er ikke oprettet en ordre!");
        }
    }
    
    private void afslutOrdre()
    {
        System.out.println("1) Gem");
        System.out.println("2) Slet");
        System.out.println("3) Tilbage");
        int choise = intLoop(3);
        
        if(choise == 1)
        {
            ordreCtr.confirmOrdre();
        }
        if(choise == 2)
        {
            ordreCtr.declineOrdre();
        }
    }
}